<!--项目选项-->
<template>
	

	
    <view class="content">
		<p>所选项目</p>
		
		<view v-for="(item,index) in List" >
				{{item}}
		</view>
		<button @click="tiao()" style="width: 100px;">确定</button>
		
		
        <view class="u-wrap">
            <view class="u-menu-wrap">
                <scroll-view scroll-y scroll-with-animation class="u-tab-view menu-scroll-view" :scroll-top="scrollTop"
                    :scroll-into-view="itemId">
                    <view v-for="(item,itemLabelName) in titleList" :key="itemLabelName" class="u-tab-item"
                        :class="[current == itemLabelName ? 'u-tab-item-active' : '']" @tap.stop="swichMenu(itemLabelName)">
                        <text class="u-line-1">{{item.itemLabelName}}</text>
                    </view>
                </scroll-view>
				
                <scroll-view :scroll-top="scrollRightTop" scroll-y scroll-with-animation class="right-box"
                    @scroll="rightScroll">
                    <view class="page-view">
                        <view class="class-item" :id="'item' + index" v-for="(item , index) in titleList" :key="index">
                            <view class="item-title">
                                <text>{{item.itemLabelName}}</text>
                            </view>
                            <view class="item-container">
                                <view class="thumb-box" v-for="(item1, index1) in item" :key="index1">
									<view class="thumb-box" v-for="(item2, index11) in item1" :key="index11">	
									  	<view>
									  		<uni-button @click="test(item2)">
											<view >{{item2.itemLabelName}}</view>
											</uni-button>
									  	</view>
									</view>
                                </view>
                            </view>
                        </view>
                    </view>
                </scroll-view>
            </view>
        </view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                scrollTop: 0, //tab标题的滚动条位置
                oldScrollTop: 0, // tab标题的滚动条旧位置
                current: 0, // 预设当前项的值
                menuHeight: 0, // 左边菜单的高度
                menuItemHeight: 0, // 左边菜单item的高度
                itemId: '', // 栏目右边scroll-view用于滚动的id
                // tabbar: JSON.parse(uni.getStorageSync('categroy')), // 渲染的数据，放在最后供你们测试
                arr: [], // 储存距离顶部高度的数组
                scrollRightTop: 0, // 右边栏目scroll-view的滚动条高度
                timer: null, // 定时器    
				titleList:[], //标题的集合
				childrenList:[],//标题下种类的List
				List:[],//去重后的集合
            }
        },
        onLoad() {
            this.getMenuItemTop()
			this.titleLists()
        },
        methods: {
			tiao(){
				const item = JSON.stringify(this.List)
				uni.redirectTo({
				    //保留当前页面，跳转到应用内的某个页面
				    url: "/pages/publish/adddiary?item="+item
				})
			},

			test(item2){
			
				//点击事件后 有重复的数据
				this.childrenList.push(item2.itemLabelName)
				//去重
				this.List=Array.from(new Set(this.childrenList))
		
			},
			
			titleLists(){
				var ccc
				uni.request({
					url:'http://localhost:8090/contents/category/lists',
					 method: 'get',
					 dataType:'JSON'
					 }).then(res => {
						 res.forEach((item) => {
							 
							   this.ccc=item
						 })
						 console.log(this.ccc)
						 this.titleList = this.ccc.data.data
						 console.log(this.titleList)
				})
			},
              getElRect(elClass, dataVal) {
                    new Promise((resolve, reject) => {
                        const query = uni.createSelectorQuery().in(this);
                        query.select('.' + elClass).fields({
                            size: true
                        }, res => {
                            // 如果节点尚未生成，res值为null，循环调用执行
                            if (!res) {
                                setTimeout(() => {
                                    this.getElRect(elClass);
                                }, 10);
                                return;
                            }
                            this[dataVal] = res.height;
                            resolve();
                        }).exec();
                    })
                },
            getMenuItemTop() {
                new Promise(resolve => {
                    let selectorQuery = uni.createSelectorQuery();
                    selectorQuery.selectAll('.class-item').boundingClientRect((rects) => {
                        // 如果节点尚未生成，rects值为[](因为用selectAll，所以返回的是数组)，循环调用执行
                        if (!rects.length) {
                            setTimeout(() => {
                                this.getMenuItemTop();
                            }, 10);
                            return;
                        }
                        rects.forEach((rect) => {
                            // 视情况而定，这里减去rects[0].top，是因为第一项顶部可能不是贴到导航栏(比如有个搜索框的情况)
                            // this.arr.push(rect.top - rects[0].top);
                            this.arr.push(rect.top)
                            resolve();
                        })
                    }).exec()
                })
            },
            async observer() {
                this.content.map((val, index) => {
                    let observer = uni.createIntersectionObserver(this);
                    observer.relativeTo('.right-box', {
                        top: 0
                    }).observe('#item' + index, res => {
                        if (res.intersectionRatio > 0) {
                            let id = res.id.substring(4);
                            this.leftMenuStatus(id);
                        }
                    })
                })
            },
            /**
             * 设置左边菜单的滚动状态
             * @index 传入的 ID
             */
            async leftMenuStatus(index) {
                this.current = index;
                // 如果为0，意味着尚未初始化
                if (this.menuHeight == 0 || this.menuItemHeight == 0) {
                    await this.getElRect('menu-scroll-view', 'menuHeight');
                    await this.getElRect('u-tab-item', 'menuItemHeight');
                }
                // 将菜单活动item垂直居中
                this.scrollTop = index * this.menuItemHeight + this.menuItemHeight / 2 - this.menuHeight / 2;
            },
            async swichMenu(index) {
                if (this.arr.length == 0) {
                    await this.getMenuItemTop();
                }
                if (index == this.current) return;
                this.scrollRightTop = this.oldScrollTop;
                this.$nextTick(function() {
                    this.scrollRightTop = this.arr[index];
                    this.current = index;
                    this.leftMenuStatus(index);
                })
            },
            async rightScroll(e) {
                this.oldScrollTop = e.detail.scrollTop;
                if (this.arr.length == 0) {
                    await this.getMenuItemTop();
                }
                if (this.timer) return;
                if (!this.menuHeight) {
                    await this.getElRect('menu-scroll-view', 'menuHeight');
                }
                setTimeout(() => { // 节流
                    this.timer = null;
                    // scrollHeight为右边菜单垂直中点位置
                    // let scrollHeight = e.detail.scrollTop + this.menuHeight / 2;
                    // scrollHeight为右边菜单头部位置
                    let scrollHeight = e.detail.scrollTop + 20;
                    for (let i = 0; i < this.arr.length; i++) {
                        let height1 = this.arr[i];
                        let height2 = this.arr[i + 1];
                        if (!height2 || scrollHeight >= height1 && scrollHeight < height2) {
                            this.leftMenuStatus(i);
                            return;
                        }
                    }
                }, 10)
            }
        }
    }
</script>

<style>
    .u-wrap {
        /* #ifdef H5 */
        height: calc(100vh - var(--window-top));
        /* #endif */
        display: flex;
        flex-direction: column;
        height: 100vh;
    }

    .u-search-box {
        padding: 18rpx 30rpx;
    }

    .u-menu-wrap {
        flex: 1;
        display: flex;
        overflow: hidden;
    }

    .u-tab-view {
        width: 200rpx;
        height: 100%;
    }

    .u-tab-item {
        height: 110rpx;
        background: #f6f6f6;
        box-sizing: border-box;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 26rpx;
        color: #444;
        font-weight: 400;
        line-height: 1;
    }

    .u-tab-item-active {
        position: relative;
        color: #06A446;
        font-size: 30rpx;
        font-weight: 500;
        background: #D6FFE7;
    }

    .u-tab-item-active::after {
        content: "";
        position: absolute;
        border-left: 4px solid #06A446;
        height: 52rpx;
        left: 0;
        top: 29rpx;
    }

    .u-tab-view {
        height: 100%;
    }

    .right-box {
        background-color: rgb(250, 250, 250);
    }

    .page-view {
        padding: 16rpx;
    }

    .class-item {
        margin-bottom: 30rpx;
        background-color: #fff;
        padding: 16rpx;
        border-radius: 8rpx;
    }

    .class-item:last-child {
        min-height: 100vh;
    }

    .item-title {
        font-size: 26rpx;
        color: $u-main-color;
        font-weight: bold;
    }

    .item-menu-name {
        margin-top: 8rpx;
        font-weight: normal;
        font-size: 24rpx;
        color: $u-main-color;
    }

    .item-container {
        display: flex;
        flex-wrap: wrap;
    }

    .thumb-box {
        width: 33.333333%;
        display: flex;
        align-items: center;
        justify-content: center;
        flex-direction: column;
        margin-top: 20rpx;
    }

    .item-menu-image {
        width: 120rpx;
        height: 120rpx;
    }
</style>